// 通用加载组件
Component({
  properties: {
    // 是否显示加载状态
    show: {
      type: Boolean,
      value: false
    },
    // 是否显示骨架屏
    showSkeleton: {
      type: Boolean,
      value: true
    },
    // 骨架屏类型：default, list, card, service, none
    skeletonType: {
      type: String,
      value: 'default'
    },
    // 骨架屏项目配置
    skeletonItems: {
      type: Array,
      value: function() {
        return [
          { width: '100%', height: '20rpx' },
          { width: '80%', height: '20rpx' },
          { width: '60%', height: '20rpx' },
          { width: '90%', height: '20rpx' }
        ]
      }
    },
    // 加载文本
    loadingText: {
      type: String,
      value: '加载中...'
    },
    // 自定义样式类
    customClass: {
      type: String,
      value: ''
    },
    // 骨架屏延迟显示时间（毫秒）
    skeletonDelay: {
      type: Number,
      value: 300
    }
  },

  data: {
    internalShowSkeleton: false
  },


  lifetimes: {
    attached() {
      // 组件初始化时自动显示骨架屏
      this.skeletonTimer = setTimeout(() => {
        this.setData({ internalShowSkeleton: true })
      }, this.data.skeletonDelay)
    },
    
    detached() {
      // 组件销毁时清理定时器
      this.clearSkeletonTimer()
    }
  },

  methods: {
    // 清理骨架屏定时器
    clearSkeletonTimer() {
      if (this.skeletonTimer) {
        clearTimeout(this.skeletonTimer)
        this.skeletonTimer = null
      }
    },

    // 手动显示加载状态
    showLoading(options = {}) {
      const {
        skeletonType = 'default',
        loadingText = '加载中...',
        skeletonDelay = 300,
        customClass = ''
      } = options

      this.setData({
        show: true,
        skeletonType,
        loadingText,
        skeletonDelay,
        customClass
      })
    },

    // 手动隐藏加载状态
    hideLoading() {
      this.setData({ show: false })
    },

    // 显示成功提示
    showSuccess(message = '加载完成') {
      wx.showToast({
        title: message,
        icon: 'success',
        duration: 1000
      })
    },

    // 显示错误提示
    showError(message = '加载失败') {
      wx.showToast({
        title: message,
        icon: 'none',
        duration: 2000
      })
    }
  }
})
